/*
 * @Author: Await
 * @Date: 2025-05-10 09:25:00
 * @LastEditors: Await
 * @LastEditTime: 2025-05-10 09:25:00
 * @Description: 图表类型工具函数
 */

/**
 * 检查图表类型是否需要笛卡尔坐标系
 * @param type 图表类型
 * @returns 是否需要笛卡尔坐标系
 */
export const needsCartesianCoords = (type: string): boolean => {
  return ['line', 'bar', 'scatter', 'candlestick', 'boxplot', 'heatmap'].includes(type);
};

/**
 * 获取图表类型的默认坐标轴配置
 * @param type 图表类型
 * @returns 默认坐标轴配置
 */
export const getDefaultAxisConfig = (type: string): any => {
  const defaults = {
    xAxis: {
      type: 'category',
      data: ['类别1', '类别2', '类别3', '类别4', '类别5']
    },
    yAxis: {
      type: 'value'
    }
  };

  // 特定图表类型的自定义配置
  if (type === 'bar') {
    return defaults;
  } else if (type === 'line') {
    return defaults;
  } else if (type === 'scatter') {
    return {
      xAxis: {
        type: 'value',
        scale: true
      },
      yAxis: {
        type: 'value',
        scale: true
      }
    };
  } else if (type === 'candlestick') {
    return {
      xAxis: {
        type: 'category',
        data: ['日期1', '日期2', '日期3', '日期4', '日期5']
      },
      yAxis: {
        type: 'value',
        scale: true
      }
    };
  }

  // 默认返回标准笛卡尔坐标系配置
  return defaults;
};

/**
 * 验证并修复图表配置
 * 确保配置有正确的格式
 * @param config 图表配置
 * @returns 修复后的配置
 */
export const validateAndFixConfig = (config: any): any => {
  if (!config) return {};

  // 创建配置副本以避免修改原始对象
  const fixedConfig = { ...config };

  // 确保series存在且为数组
  if (!fixedConfig.series) {
    fixedConfig.series = [];
  } else if (!Array.isArray(fixedConfig.series)) {
    fixedConfig.series = [fixedConfig.series];
  }

  // 确保笛卡尔坐标系图表有正确的坐标轴配置
  if (needsCartesianCoords(fixedConfig.type)) {
    // 确保xAxis为数组格式
    if (!fixedConfig.xAxis) {
      fixedConfig.xAxis = [{
        type: 'category',
        data: ['类别1', '类别2', '类别3', '类别4', '类别5']
      }];
    } else if (!Array.isArray(fixedConfig.xAxis)) {
      fixedConfig.xAxis = [fixedConfig.xAxis];
    }

    // 确保yAxis为数组格式
    if (!fixedConfig.yAxis) {
      fixedConfig.yAxis = [{
        type: 'value'
      }];
    } else if (!Array.isArray(fixedConfig.yAxis)) {
      fixedConfig.yAxis = [fixedConfig.yAxis];
    }
  }

  return fixedConfig;
};